﻿#include "timetasks.h"
#include <QDebug>
#include "../commons/commonblowair.h"
#include "../commons/blowairpins.h"

TimeTasks  * TimeTasks::m_timeTasks = NULL;


TasksThread::TasksThread(QObject *parent): QThread(parent)
  , m_isStop(false)
{

}

TasksThread::~TasksThread()
{

}

void TasksThread::stopRun()
{
#ifdef DEBUG_INFOR
        qDebug()<< metaObject()->className()<<__func__<<__LINE__;
#endif
    m_isStop = true;
}

void TasksThread::startRun()
{
#ifdef DEBUG_INFOR
        qDebug()<< metaObject()->className()<<__func__<<__LINE__;
#endif
    m_isStop = false;
    start();
}

void TasksThread::setPinTime(int pins, QPair<int, int> pairs)
{


    m_pins = pins;
    m_runTimes = pairs;
}

int TasksThread::getPins()
{
    return m_pins;
}

void TasksThread::run()
{
#ifdef DEBUG_INFOR
    qDebug()<< metaObject()->className()<<__func__<<__LINE__<<"m_pins=="<<m_pins;
#endif
    int lensa = BlowairPins::gestance()->getRealPin(m_pins );
#ifdef DEBUG_INFOR
    qDebug()<< metaObject()->className()<<__func__<<__LINE__<<"m_pins=="<<lensa;
#endif
    if(lensa < 0){
        m_isStop =true;
#ifdef DEBUG_INFOR
        qDebug()<< metaObject()->className()<<__func__<<__LINE__<<"m_runTimes=="<<m_runTimes;
#endif
        return;
    }
    int pnias = lensa;
#ifdef DEBUG_INFOR
    qDebug()<< metaObject()->className()<<__func__<<__LINE__<<"pnias=="<<pnias;
#endif
    while (!m_isStop) {
#ifdef DEBUG_INFOR
        qDebug()<< metaObject()->className()<<__func__<<__LINE__<<"m_runTimes=="<<m_runTimes;
#endif
        if(m_isStop){
#ifdef DEBUG_INFOR
        qDebug()<< metaObject()->className()<<__func__<<__LINE__<<"m_isStop=="<<m_isStop;
#endif
            emit sigTimeTasks(pnias , 0);
            return;
        }
#ifdef DEBUG_INFOR
        qDebug()<< metaObject()->className()<<__func__<<__LINE__<<"m_isStop=="<<m_isStop;
#endif
        emit sigTimeTasks(pnias , 1);
        int timea = m_runTimes.first;
#ifdef DEBUG_INFOR
        qDebug()<< metaObject()->className()<<__func__<<__LINE__<<"timea=="<<timea;
#endif
        for(int i = 0 ;i < timea;i+=800){
            msleep(800);
#ifdef DEBUG_INFOR
        qDebug()<< metaObject()->className()<<__func__<<__LINE__<<"i=="<<i;
#endif
            if(m_isStop){
#ifdef DEBUG_INFOR
                qDebug()<< metaObject()->className()<<__func__<<__LINE__<<"m_runTimes=="<<m_runTimes;
#endif
                emit sigTimeTasks(pnias , 0);
                return;
            }
        }
        if(m_isStop){
#ifdef DEBUG_INFOR
            qDebug()<< metaObject()->className()<<__func__<<__LINE__<<"m_runTimes=="<<m_runTimes;
#endif
            emit sigTimeTasks(pnias , 0);
            return;
        }
        emit sigTimeTasks(pnias , 0);
        timea = m_runTimes.second;
#ifdef DEBUG_INFOR
        qDebug()<< metaObject()->className()<<__func__<<__LINE__<<"timea=="<<timea;
#endif
        for(int i = 0 ;i < timea;i+=800){
#ifdef DEBUG_INFOR
        qDebug()<< metaObject()->className()<<__func__<<__LINE__<<"i=="<<i;
#endif
            msleep(800);
            if(m_isStop){
#ifdef DEBUG_INFOR
                qDebug()<< metaObject()->className()<<__func__<<__LINE__<<"m_runTimes=="<<m_runTimes;
#endif
                return;
            }
        }
    }

}



TimeTasks::TimeTasks(QObject *parent) : QObject(parent)
{
    initTimeTasks();
}

TimeTasks::~TimeTasks()
{

}

TimeTasks *TimeTasks::gestance()
{
    if(m_timeTasks == NULL){
        m_timeTasks = new TimeTasks();
    }
    return m_timeTasks;

}

void TimeTasks::initTimeTasks()
{
    m_allTasksThread.clear();
    QList<int> keyPins = CommonBlowair::gestance()->keyPins();
    for(int i =0;i < keyPins.size() ;i++){
        int pins =  keyPins.at(i);
        QPair<int, int> pairs =   CommonBlowair::gestance()->getPinData(pins);
        TasksThread *tasksThread = new TasksThread(this);
        connect(tasksThread,SIGNAL( sigTimeTasks(int  , int ) ),this,SIGNAL(  sigTimeTasks(int  , int ) ) );
        tasksThread->setPinTime(pins,pairs);
        m_allTasksThread.append(tasksThread);
    }
}

void TimeTasks::updateTimeTasks()
{
    for(int i =0;i < m_allTasksThread.size() ;i++){
        TasksThread *tasksThread = m_allTasksThread.at(i);
        int pins = tasksThread->getPins();
        QPair<int, int> pairs =   CommonBlowair::gestance()->getPinData(pins);
        tasksThread->setPinTime(pins,pairs);
    }
}

void TimeTasks::runAll()
{
    for(int i =0;i < m_allTasksThread.size() ;i++){
        TasksThread *tasksThread = m_allTasksThread.at(i);
        tasksThread->startRun();
    }
}

void TimeTasks::runIndexs(int inmdexs)
{
#ifdef DEBUG_INFOR
    qDebug()<<__func__<<__LINE__;
#endif
    for(int i =0;i < m_allTasksThread.size() ;i++){
        TasksThread *tasksThread = m_allTasksThread.at(i);
#ifdef DEBUG_INFOR
        qDebug()<<__func__<<__LINE__<<"i=="<<i;
        qDebug()<<__func__<<__LINE__<<"inmdexs=="<<inmdexs;
#endif
        int lensa = BlowairPins::gestance()->getUserPin(inmdexs );
#ifdef DEBUG_INFOR   qDebug()<<__func__<<__LINE__<<"lensa=="<<lensa;
        qDebug()<<__func__<<__LINE__<<"tasksThread->getPins()=="<<tasksThread->getPins();
#endif
        if( lensa == tasksThread->getPins()   && lensa >=0 ){
#ifdef DEBUG_INFOR
            qDebug()<<__func__<<__LINE__<<"inmdexs=="<<inmdexs;
#endif
            tasksThread->startRun();

            return;
        }

    }
}

void TimeTasks::stopIndexs(int inmdexs)
{
#ifdef DEBUG_INFOR
    qDebug()<<__func__<<__LINE__;
#endif
    for(int i =0;i < m_allTasksThread.size() ;i++){
        TasksThread *tasksThread = m_allTasksThread.at(i);
#ifdef DEBUG_INFOR
        qDebug()<<__func__<<__LINE__<<"i=="<<i;
#endif
        int lensa = BlowairPins::gestance()->getUserPin(inmdexs );
        if( lensa == tasksThread->getPins()   && lensa >=0 ){
#ifdef DEBUG_INFOR
            qDebug()<<__func__<<__LINE__<<"inmdexs=="<<inmdexs;
#endif
            tasksThread->stopRun();
            return;
        }

    }
}


